const siteinfo = require('config');
import util from './util.js'
import md5 from "./md5.js";
const BASE_URL = siteinfo.siteroot;
console.log(BASE_URL, "??")
/**
 * 网络请求封装
 * @param url url路径名 例：/books
 * @param method 请求方式 POST/GET/DELETE等
 * @param data 请求参数 string类型
 * @param success  成功回调
 * @param fail 失败回调
 */
function request(url, method, data, success, fail) {
	if (!fail && !success && typeof data === 'function') {
		success = data;

	} else if (!fail) {
		if (typeof data === 'function') {
			fail = success
			success = data
			data = ""
		} else if (typeof data === 'object') {
			var data = data
		} else {
			console.log("传递参数类型不正确");
		}
	}
	var wxtask = wx.request({
		url: BASE_URL + url,
		header: {
			'content-type': 'application/json',
			'token':uni.getStorageSync('token')
		},
		method: method,
		data: data,
		success: function(res) {
			switch (res.data.code) {
				case 1: //请求成功
					success(res.data)
					break
				case -10000: //请求失败。
					uni.showToast({
						title: '登陆失败，请检查用户名和密码',
						icon: 'none'
					})
					break
				case 401: //请求失败。
					uni.showToast({
						title: '请先登录再进行操作',
						icon: 'none'
					})
					setTimeout(res => {
						uni.navigateTo({
							url: '/pages/login/index'
						})
					}, 600)
					break
				case 0: //提示
					uni.showToast({
						title: res.data.msg,
						icon: 'none'
					})
					break
			}
		},
		fail: function(res) {
			if (fail) {
				fail(res)
			}
		}
	})
	return wxtask;
}
/**
 * 请求封装-Get
 * @param url 请求地址
 * @param data 请求参数
 * @param success 成功回调
 * @param fail  失败回调
 * @constructor
 *
 * 返回值为微信请求实例   用于取消请求
 */
function Get(url, data, success, fail) {
	return new Promise((resolve, reject) => {
		return request(url, "GET", data, success, fail)
	})
}
/**
 * 请求封装-Post
 * @param url 请求地址
 * @param data 请求参数
 * @param success 成功回调
 * @param fail  失败回调
 * @constructor
 *
 * 返回值为微信请求实例   用于取消请求
 */
function Post(url, data, success, fail) {
	return new Promise((resolve, reject) => {
		return request(url, 'POST', data, success, fail)
	})
}
/**
 * 请求封装-PUT
 * @param url 请求地址
 * @param data 请求参数
 * @param success 成功回调
 * @param fail  失败回调
 * @constructor
 *
 * 返回值为微信请求实例   用于取消请求
 */
function Put(url, data, success, fail) {
	return new Promise((resolve, reject) => {
		return request(url, 'PUT', data, success, fail)
	})
}

/**
 * 请求封装-Delete
 * @param url 请求地址
 * @param data 请求参数
 * @param success 成功回调
 * @param fail  失败回调
 * @constructor
 *
 * 返回值为微信请求实例   用于取消请求
 */
function Delete(url, data, success, fail) {
	return new Promise((resolve, reject) => {
		return request(url, 'DELETE', data, success, fail)
	})
}
/**
 * 图片上传
 * @param url 请求地址
 * @param data 请求参数
 * @param success 成功回调
 * @param fail  失败回调
 * @constructor
 * 返回值为微信请求实例
 */
function upload(url, tempPath, success, progress) {
	var uploadTask = wx.uploadFile({
		header: {
			'content-type': 'application/x-www-form-urlencoded',
			'sapixx-apiid': siteinfo.api_id,
			'sapixx-token': wx.getStorageSync('token'),
			'Cookie': 'PHPSESSID=' + wx.getStorageSync('session_id')
		},
		url: BASE_URL + url,
		filePath: tempPath,
		name: 'file',
		success: function(res) {
			typeof success == "function" && success(JSON.parse(res.data))
		}
	})
	uploadTask.onProgressUpdate((res) => {
		typeof progress == "function" && progress({
			progress: res.progress
		})
	})
	return uploadTask;
}
exports.Get = Get;
exports.Post = Post;
exports.Put = Put;
exports.Delete = Delete;
exports.upload = upload;